home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
UTIL
/
DESKTOP
/
PATCH
/
!WimpPatch
/
PatchAll
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1995-01-18
|
7KB
|
264 lines
>PatchAll
By The Moog
1995 Matthew Godbolt
$;" at line ";
"OS_Module",18,"WindowManager"
,,,WimpMod
code% &2000
pass%=4
O%=code%
[OPT pass%
EQUD 0
EQUD init
EQUD final
EQUD 0
EQUD title
EQUD help
EQUD 0
EQUD 0
EQUD 0
EQUD 0
EQUD 0
.title
EQUS "PatchAll"
EQUB 0
.help
DEQUS "PatchAll"+
9+"1.10 (12 Jul 1993)
1995 Matthew Godbolt"
EQUB 0
ALIGN
.init
STMFD R13!,{R0,R1,R14}
MOV R1,#8
LDR R0,[R1]
STR R0,oldbranch
ADR R1,myjump-8
SUB R0,R0,R1,LSR #2
STR R0,myjump
ADR R0,myswihand-&10
MOV R0,R0,LSR #2
R R0,R0,#&EA000000
MOV R1,#8
STR R0,[R1]
ADR R1,fontname
MOV R2,#13*16
MOV R3,#13*16
MOV R4,#0
MOV R5,#0
SWI "XFont_FindFont"
MVNVS R0,#0
STR R0,myfonthandle
LDMFD R13!,{R0,R1,PC}
.zox EQUD 0
72.fontname EQUS"Trinity.Medium"+
13:ALIGN
.myfonthandle EQUD0
.myjump B &1F033C0
.final
STMFD R13!,{R0,R1,R14}
LDR R0,oldbranch
MOV R1,#8
STR R0,[R1]
LDR R0,myfonthandle
SWI "XFont_LoseFont"
B;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
LDMFD R13!,{R0,R1,PC}^
D".oldbranch EQUD &EA6051CD
.Mow EQUD &0
.myswihand
STMFD R13!,{R10,R14}
BIC R14,R14,#&FC000003
LDR R14,[R14,#-4]
BIC R14,R14,#&FF000000
STR R14,Mow
BIC R14,R14,#&20000
N)LDR R10,ploticon:CMP R14,R10:BEQ Plot
O&LDR R10,ospl:CMP R14,R10:BEQ Write
P)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
LDR R10,CreateM:CMP R14,R10
R!LDMFD R13!,{R10,R14}:B myjump
.Swi_cm
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
BL Jacob
LDMFD R13!,{R0-R12,R14}
B myjump
.Jacob
STMFD R13!,{R14}
\ TST R1,#3:LDMNEFD R13!,{PC}^
ADD R1,R1,#28
.Flopsy
LDR R0,[R1,#8]
`+LDRB R2,myfonthandle:BIC R0,R0,#&FF<<24
R R0,R0,R2,LSL #24
R R0,R0,#1<<6
STR R0,[R1,#8]
dSLDR R0,[R1,#4]:MOVS R0,R0:CMNNE R0,#1:BEQ NotIndied:CMP R0,#&8000:BLT NotIndied
e8STMFD R13!,{R1}:SWI "OS_ValidateAddress":MOVCC R1,R0
BLCC Jacob:LDMFD R13!,{R1}
.NotIndied
LDR R0,[R1]
ADD R1,R1,#24
TST R0,#&80:BEQ Flopsy
LDMFD R13!,{PC}^
.ploticon EQUD &400E2
.ClrBack EQUD 256+16
.CreateM EQUD &400D4
.ospl EQUD &45
.Word EQUD &E59AE05C
.Wind EQUS "Wind"
.Clear
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
CMP R0,#1:BNE Normal
y1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
z(LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
{(BIC R14,R14,#&FC000003:LDR R14,[R14]
|%LDR R0,Word:CMP R0,R14:BNE Normal
LDR R0,[R10,#88]
~ORSB R6,R0,#0:.shpondle ADD R14,R6,#512:CMP R14,R2:MOVLT R6,R14:BLT shpondle
LDR R0,[R10,#92]
MRSB R7,R0,#0:.shpondle SUB R14,R7,#256:CMP R14,R3:MOV R7,R14:BGT shpondle
=MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
MVN R1,#0
CMP R2,#0:ADREQ R1,Mode0
CMP R2,#2:ADREQ R1,Mode12
CMP R2,#3:ADREQ R1,Mode15
CMN R1,#1:BEQ Normal
LDR R14,ModeLoad
CMP R14,R2:BEQ DontLoad
STMFD R13!,{R0-R7}
;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
MOV R0,#5:LDR R1,[R13,#4]
CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
"STR R2,SpriteAt:STR R4,[R2],#4
=LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
%SWI "XOS_File":LDMFD R13!,{R0-R7}
STR R2,ModeLoad
.DontLoad
MOV R8,R4:MOV R9,R5
MOV R0,#&22:
R R0,R0,#&100
LDR R1,SpriteAt
ADR R2,Backg
!MOV R3,R6:MOV R4,R7:MOV R5,#0
.Loop
STMFD R13!,{R0-R5}
SWI "XOS_SpriteOp"
LDMFD R13!,{R0-R5}
BVS Normal
%ADD R3,R3,#512:CMP R3,R8:BLT Loop
/MOV R3,R6:ADD R4,R4,#256:CMP R4,R9:BLT Loop
LDMFD R13!,{R0-R12,R14}
MOVS PC,R14
.Normal
LDMFD R13!,{R0-R12,R14}
B myjump
%.Backg EQUS "background"+
0:ALIGN
.ModeLoad EQUD -1
.SpriteAt EQUD 0
:.Mode0 EQUS "<Patch$Dir>.WindowDrop.Sprites0"+
0:ALIGN
<.Mode12 EQUS "<Patch$Dir>.WindowDrop.Sprites12"+
0:ALIGN
<.Mode15 EQUS "<Patch$Dir>.WindowDrop.Sprites15"+
0:ALIGN
.Word2 LDR R14,[R12,#84]
.Word3 EQUD &0A00000C
.Bonga EQUD 0
.WriteMen EQUD &70D0121
.Write
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
&LDR R4,Word2:CMP R4,R14:BNE Normal
LDR R14,[R13,#64]
,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
&LDR R4,Word3:CMP R4,R14:BNE Normal
CMP R0,#4:BNE Normal
7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
R9,R14,#&F<<12
CMP R9,#12<<12:BGE Normal
)LDR R9,WriteMen:CMP R14,R9:BEQ Normal
STMFD R13!,{R0-R2,R14}
BMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
/LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
BEQ Already
STMFD R13!,{R0-R5}
-LDRB R0,myfonthandle:SWI "XFont_LoseFont"
ADR R1,fontname
MOV R2,#13*16
MOV R3,#13*16
MOV R4,#0
MOV R5,#0
SWI "XFont_FindFont"
MVNVS R0,#0
STR R0,myfonthandle
LDMFD R13!,{R0-R5}
.Already
LDMFD R13!,{R0-R2,R14}
#TST R14,#2:
Q R9,#0:MOVNE R9,#8
1CMP R9,#0:BNE h:TST R14,#&200:MOVNE R9,#16:.h
F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
R R1,R1,R0,LSL #24
R R1,R1,#&40:
bl(&78E8):LDR R1,Bo
#CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
CMP R9,#16:SUBEQ R1,R1,R4
STR R1,Bo
LDR R1,[R13,#56]
(MOV R9,R1,LSR #28:STRB R9,[R12,#124]
R14,R1,#&F000000
MOVS R14,R14,LSR #24
CMPEQ R9,#0:
Q R14,#7
STRB R14,[R12,#123]
bl(&7348)
BVS Normal
LDMFD R13!,{R0-R12,R14}
0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
.Bo &0
.ModeLast EQUD
.Wordx LDRB R14,[R4,#40]
.Plot
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
&LDR R7,Wordx:CMP R7,R14:BNE Normal
@LDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
"d":BNE Normal
ILDR R0,[R4,#4]:ADR R7,Moglin:.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
8CMP R14,#0:BNE CopLp:MOV R14,#
".":STRB R14,[R7,#-1]
FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
Q R14,#0:STRB R14,[R7],#1
BNE CopLp
LDR R0,[R12,#8]
.RepLp
TEQ R0,#&40000001:BEQ Normal
ADR R7,Moglin:LDR R6,[R0,#4]
/.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
"TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
(CMP R14,R5:BEQ SeeIfSame:BNE NextOne
CLDMIA R1,{R0-R7}:ADR R6,open_dir:ADR R14,Brea:STMIA R14,{R0-R7}
LDMFD R13!,{R0-R12,R14}
ADR R1,Brea:B myjump
.NextOne LDR R0,[R0]:B RepLp
).open_dir EQUS "sdirectoryo"+
0:ALIGN
$.Brea ]:P%+=64:O%+=64:[OPT pass%
.Moglin
]P%+=256:O%+=256
"OS_File",10,"<Patch$Dir>.AllPatch",&FFA,,code%,O%
bl(addr)
[OPT pass%
ADR R14,P%+16
R R14,R14,#3
LDR PC,P%+4
EQUD WimpMod+addr